
package demo;

import Initializer.InitializeBoard;
import InterfazJpl.Agente;
import JplManagement.*;
//import JplManagement.Salida;
import java.io.FileNotFoundException;
import aimax.osm.data.Position;
import java.util.*;
import java.io.File;
import com.google.gson.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

import parserosm.ParserOsm;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) throws FileNotFoundException, IOException {

        int j = 0;

        try {
            int i = 0;
            Gson gson = new Gson();
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);
            Agente agente = new Agente();
            File file = new File("files\\ulm.osm");
            InitializeBoard tablero = new InitializeBoard();
            ArrayList orientacion_accion = new ArrayList();
            
            Resultado plan = new Resultado();
            plan.plan=new ArrayList();
            tablero.Initializer();
            ParserOsm parseador = new ParserOsm(file);

            parseador.crearMapa();

//            while (j < 100) {
                List<Position> nodosRecorridos = new ArrayList();
                JplManagement.useJpl uJpl = new JplManagement.useJpl();
                uJpl.initializeWumpus(tablero.tableroWumpus.problems[0], "1", "1");

                do {
                    Plan acciones = new Plan();
                    agente.getPerception();
                    System.out.println(agente.perception);
                    orientacion_accion = uJpl.getWumpusStep(agente.perception);
                    System.out.println(orientacion_accion.get(1));
                    nodosRecorridos = agente.procesarAccion(orientacion_accion, tablero, parseador);
                    agente.limpiarperception();
                    if (!orientacion_accion.get(1).toString().equals("avanzar") && !orientacion_accion.get(1).toString().equals("pared")) {
                        acciones.accion = orientacion_accion.get(1).toString();
                    } else {
                        if (nodosRecorridos != null) {
                            acciones.accion = orientacion_accion.get(1).toString();
                            acciones.nodosRecorridos = Salida.generarSalida(nodosRecorridos, parseador);
                            i++;
                        }
                    }
                    if (acciones.accion!=null){
                        plan.plan.add(acciones);
                    }
                    if (i > 100) {
                        break;
                    }
                } while (!orientacion_accion.get(1).toString().equals("salir") && !orientacion_accion.get(1).toString().equals("fin"));

                Salida.escribirjson(gson.toJson(plan), "files\\salida.json", true);
                j++;
//            }

        } catch (NoSuchFieldException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}
